As the need for increasing computer processing power, storage capacity, and communications bandwidth continues to outpace phenomenal increases in the speeds and capacities of processors, memories, communications systems, and mass-storage devices, various approaches for distributed computing have evolved to harness discrete computer systems into high-end, distributed computer systems. Single-processor computer systems were originally interconnected by network communications systems so that processes running independently on the computer systems could intercommunicate and coordinate activities and share data. High-end computers have evolved from single-processor machines to multi-processor computers and, later, to diverse, extremely parallel, distributed systems comprising tens, hundreds, and even thousands of individual computer systems interconnected by network communications systems, in which processes may migrate from one computer to another based on the availability of processing cycles on the different computer systems within the distributed computer system. Programming techniques have also evolved, providing, in addition to single-threaded processes assigned to particular processors, distributed processes supporting partially independent execution of tens, hundreds, and thousands of execution threads within the context of each process that execute on multiple processors.
Although computational techniques have evolved greatly in order to support highly distributed computing systems, in which processes and threads can be transferred from machine to machine during execution, the mechanisms by which threads communicate with one another have remained largely unchanged. These methods include shared-memory-based communication and message-based communication. Shared-memory-based communication involves providing memory regions that can be concurrently accessed by numerous threads, so that values deposited by one thread may be accessed by another. Message-based thread communications involves sending data-containing messages from one thread to another. Message-based thread communications may be implemented using shared memory, or may be implemented using high-speed networking, operating-system support, and other techniques that allow a thread to compose and transmit a data-containing message to another, concurrently executing thread. In distributed computing systems, a great deal of data is exchanged by messages, because processes and threads are generally distributed on independent machines interconnected through high-speed networking systems. For this reason, message-based inter-thread communication has been traditionally used for distributed computing systems. Shared-memory-based thread communications has been traditionally used on discrete, single-processor and multi-processor computing systems, in which processors physically share access to a common, physical memory. Shared-memory-based inter-thread communication is the simplest type of inter-thread communication to implement and employ. Designers, implementers, and users of distributed computing systems have long desired a distributed computing system in which shared-memory-based inter-thread communication can be employed for threads executing both within a single machine as well as for threads distributed over multiple machines interconnected by high-speed networked communications systems.